iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0

延續前一天發現的問題,當已經按下變身鍵出現變身UI時,我預期應該要限制主角行動,這時候方向鍵只會操控變身UI的選項,然而主角還是會移動呢!

造成這個窘境的原因是因為,按下方向鍵時,操作移動的腳本及選擇變身的腳本同時都會讀取到這個輸入訊號,並同時作出兩個對應功能。

因此我們需要有個狀態機來控管各狀態下能做的事情。

以下是我在BlueRemedy中有使用到的各項狀態,運作方式都一樣,在這邊我就以上述的問題為目標作介紹。

Step1:

首先在Player物件下新增PlayerStatus腳本
https://ithelp.ithome.com.tw/upload/images/20200914/201304147hpJGjpCY3.jpg

Step2:

變數有分兩類,一類是狀態(以is…作為命名開頭)、一類是可以作的事(我以can...作為開頭)
注意!記得將變數設為靜態公開,方便之後設定。
https://ithelp.ithome.com.tw/upload/images/20200914/20130414Hn8u71YZhg.jpg

Step3:

在Update中我會將所有can類先設為true,然後再依各個狀態,將對應的can類設為false
https://ithelp.ithome.com.tw/upload/images/20200914/20130414FeVeiJ8pt8.jpg

Step4:

回到"變身狀態限制移動"這個情況為例,我可以設定為:當我正在"變身階段"時,判斷能否移動的變數為false。我已經設好一個變數叫做canMove及canJump,當isChanging正在變身時,他們兩個就會設為false
https://ithelp.ithome.com.tw/upload/images/20200914/20130414Rex9MIQahj.jpg

Step5:

有了這個機制後回到PlayerChange中,並在按下變身鍵時設定isChanging=true,放開時為false。
https://ithelp.ithome.com.tw/upload/images/20200914/20130414bOHERIhD5Z.jpg
https://ithelp.ithome.com.tw/upload/images/20200914/20130414D1SlYkAaAm.jpg

Step6:

再回到控制移動的PlayerControl,在移動時增加條件
https://ithelp.ithome.com.tw/upload/images/20200914/20130414VqNcGKjCc4.jpg

###看看完成效果

完美!


或許有其他更專業的狀態機制作方式,而我使用的方式或許比較直接粗暴,但以這類小型專案來說還蠻方便管理及設定,讀者們不妨試試看喔!


上一篇
[Day13] 主角變身
下一篇
[Day15] 主角-攻擊
系列文
Unity遊戲開發與實踐-BlueRemedy內容分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言